package com.chd.ledger_server.service.impl;

import com.chd.ledger_server.entity.SysUsers;
import com.chd.ledger_server.dao.SysUsersDao;
import com.chd.ledger_server.service.SysUsersService;
import com.chd.ledger_server.domain.PageDto;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import javax.annotation.Resource;
import java.util.List;

/**
 * 系统用户表(SysUsers)表服务实现类
 *
 * @author makejava
 * @since 2025-07-06 05:56:43
 */
@Service("sysUsersService")
public class SysUsersServiceImpl implements SysUsersService {
    @Resource
    private SysUsersDao sysUsersDao;

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    @Override
    public SysUsers queryById(Integer userId) {
        return this.sysUsersDao.queryById(userId);
    }

    /**
     * 分页查询
     */
    @Override
    public PageInfo queryAllSysUserssByPage(PageDto pageDto) {
        //空值处理
        if (pageDto.getPage() == null || pageDto.getSize() == null) {
            pageDto.setPage(1);
            pageDto.setSize(10);
        }
        PageHelper.startPage(pageDto.getPage(), pageDto.getSize());
        List<SysUsers> list = sysUsersDao.queryAll(pageDto.getSysUsers());
        PageInfo<SysUsers> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 新增数据
     *
     * @param sysUsers 实例对象
     * @return 实例对象
     */
    @Override
    public SysUsers insert(SysUsers sysUsers) {
        this.sysUsersDao.insert(sysUsers);
        return sysUsers;
    }

    /**
     * 修改数据
     *
     * @param sysUsers 实例对象
     * @return 实例对象
     */
    @Override
    public SysUsers update(SysUsers sysUsers) {
        this.sysUsersDao.update(sysUsers);
        return this.queryById(sysUsers.getUserId());
    }

    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer userId) {
        return this.sysUsersDao.deleteById(userId) > 0;
    }

    @Override
    public String login(String userName, String userPsw) {
        // 1. 查询用户信息
        List<SysUsers> users = queryUser(userName, userPsw);

        // 2. 账号不存在校验
        if (users == null || users.isEmpty()) {
            return "无此账户，请检查！";
        }

        SysUsers user = users.get(0);

        // 3. 账户状态校验（0-禁用，1-激活）
        if (user.getUserStatus() == null || user.getUserStatus() != 1) {
            return "账户未激活，请联系管理员！";
        }

        // 4. 密码正确处理
        if (userPsw.equals(user.getUserPsw())) {
            // 重置登录失败次数为0
            user.setLoginCount(0);
            sysUsersDao.update(user);
            return "登录成功";
        }
        // 5. 密码错误处理
        else {
            // 计算新失败次数（处理null情况）
            int currentFailCount = user.getLoginCount() == null ? 0 : user.getLoginCount();
            int newFailCount = currentFailCount + 1;

            // 失败次数达到3次：禁用账户并重置失败次数
            if (newFailCount >= 3) {
                user.setUserStatus(0); // 0-禁用状态
                user.setLoginCount(0);
                sysUsersDao.update(user);
                return "登陆失败！密码错误次数已达3次，账号已锁定，请联系管理员！";
            }
            // 失败次数不足3次：更新失败次数
            else {
                user.setLoginCount(newFailCount);
                sysUsersDao.update(user);
                return "登陆失败！当前密码错误次数" + newFailCount + "次，失败三次账号将锁定！";
            }
        }
    }

    @Override
    public List<SysUsers> queryUser(String userName, String userPsw) {
        SysUsers queryUser = new SysUsers();
        queryUser.setUserName(userName);
        List<SysUsers> users = sysUsersDao.queryAll(queryUser);
        return users;
    }
}
